package com.tedu.api.list;

import org.junit.Test;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/**
 * set集合是Collection集合子接口
 * Set集合接口：无序，无下标，元素不可以重复【唯一性】
 * Set集合方法与Collection集合方法【使用一致】
 * add()   remove()  contain()  size()  clear()
 * 使用Iterator迭代器遍历
 * Set集合--接口--无法创建对象--实现类：
 * HashSet:由哈希算法实现，不保证元素顺序，不允许元素重复，可以存null
 * LinkedHashSet:【方法与HashSet一致】，由哈希算法实现，保证元素顺序
 *               不允许元素重复，可以存null
 * TreeSet【算法：红黑树】：不可以存null,按照元素自然顺序或指定比较器进行元素储存，不允许元素重复
 */
public class SetAPI {
    @Test
    public void testSet() {
        Set<String> set = new HashSet<>();
        set.add("蒸鹿尾儿");
        set.add("蒸羊羔");
        set.add("烧花鸭");
        set.add("烧子鹅");
        set.add("烧花鸭");
        set.add(null);
        System.out.println("Set集合：" + set);
        boolean b = set.contains("烧花鸭");
        System.out.println("判断Set集合中是否存在【烧花鸭】元素" + b);
        System.out.println("判断Set集合长度：" + set.size());
        //Iterator遍历  set   集合  元素
        // 1.通过set集合调用Iterator() 获取迭代器实例：Iterator
        // 2.Iterator遵循：问，取，删    删除“烧子鹅“元素
        Iterator<String> iterator = set.iterator();
        while (iterator.hasNext()) {//问:set集合没有元素--有：true
            String str = iterator.next();//取：set集合元素
            //null 引用类型默认值       不是字符串
            //判断明确的值              必须 ==
            //判断对象                 使用  ”字符串“.equals(str) 实值
           //                         obj.equals(add)         地址值
            if (str==null) {          //如果 ”烧子鹅“ 等于 ”烧子鹅“ 元素
                iterator.remove();   //删
            }
        }
        System.out.println("删除'烧子鹅'后的 Set 集合："+ set);
    }
}